class Prompt:
  
  # （提示词）查找关键词和对应值  
  def single_doc_find_keyword_prompt(self, doc_text, find_keywords):
    SINGLE_DOC_FIND_KEYWORD_PROMPT = '''
你的任务是根据提供的关键词库处理提供的文档，完成以下工作：

1. 根据关键词库是否为空进行不同处理：
   - 如果**关键词库非空**，则仅从文档中识别出存在于关键词库中，且与具体数值或描述关联的关键字。
   - 如果**关键词库为空**，则识别文档中所有与具体数值或描述关联的关键字。

2. 对于每个识别出的关键字：
   - **提取**该关键字。
   - **提取**与之相关的具体数值或描述。
   - **根据**关键字、数值或描述和**全文内容**（包括但不限于文章标题、节标题、子节标题、表格标题等），判断关键字指代的具体**指标或对象**。

请为每一个识别出的关键字及其数值或描述，构造一个包含以下字段的**JSON对象**：

```json
{
  "result": [
    {
      "i": 1,           // 用实际的索引序号替换此占位符
      "k": "关键字名称", // 用实际从文本中找到的关键字替换此占位符
      "v": "具体数值或描述",    // 用实际数值或描述替换此占位符
      "o": "关键字指代的具体指标或对象" // 用实际的对象替换此占位符
    },
    // 如果有更多关键字和关键字对应的值或描述，请继续添加类似上面的对象，并递增索引序号
  ]
}
```

**注意：**
- **关键词库**：请注意，不同的对象可能使用相同的关键词，如“利润”可能涉及“手机利润”和“电脑利润”。
- **关键字**：指文档中**与具体数值或描述直接关联**的词语，如“成品率”、“成本”等。
- **具体数值或描述**：指与关键字**直接关联**的实际数据、测量结果或描述信息，如“≥90.00%”、“$123,456.78”、“无色、透明”等。
- **对象**：根据关键字、数值或描述和全文内容（包括但不限于文章标题、节标题、子节标题、表格标题等）确定的关键字所指代的具体指标或对象。
- **关键字与数值或描述的关联**：在提取关键字和数值或描述时，务必确保数值或描述是与该关键字直接关联的，即数值或描述对应的是该关键字所代表的内容。
- **索引序号**：每个关键字条目的索引应唯一，按它们在文档中**首次**出现的顺序递增。
- **JSON格式**：输出必须严格按照上述JSON格式组织，仅输出JSON。并且内容以“```json”开始，以“```”结束。
- **无结果情况**：如果未找到任何与数值或描述相关联的关键字，则仅输出“null”，不要输出其他任何内容，并且内容以“```json”开始，以“```”结束。


以下是**四种情况**的示例输入和输出：

--情况一：文档存在关键字，且关键词库不为空--
**示例输入：**
关键词库："成本"
文档："本季度的成品率：≥90.00%，成本控制得当，成本为$123,456.78，公司2024年的员工数为234人。今年的利润为$2,345,678.90，销售额增长了15%，产品液体一的性状为无色、透明。"

**示例输出：**
```json
{
  "result": [
    {
      "i": 1,
      "k": "成本",
      "v": "$123,456.78",
      "o": "本季度的成本"
    }
  ]
}
```

--情况二：文档存在关键字，且关键词库为空--
**示例输入：**
关键词库：""
文档："本季度的成品率：≥90.00%，成本控制得当，成本为$123,456.78，公司2024年的员工数为234人。今年的利润为$2,345,678.90，销售额增长了15%，产品液体一的性状为无色、透明。"

**示例输出：**
```json
{
  "result": [
    {
      "i": 1,
      "k": "成品率",
      "v": "≥90.00%",
      "o": "本季度的成品率"
    },
    {
      "i": 2,
      "k": "成本",
      "v": "$123,456.78",
      "o": "本季度的成本"
    },
    {
      "i": 3,
      "k": "员工数",
      "v": "234",
      "o": "公司2024年的员工数"
    },
    {
      "i": 4,
      "k": "利润",
      "v": "$2,345,678.90",
      "o": "今年的利润"
    },
    {
      "i": 5,
      "k": "销售额",
      "v": "增长了15%",
      "o": "销售额增长率"
    },
    {
      "i": 6,
      "k": "液体一的性状",
      "v": "无色、透明",
      "o": "产品液体一的性状"
    },
  ]
}
```

--情况三：文档不存在关键字，且关键词库不为空--
**示例输入：**
关键词库："利润, 销售额, 库存水平"
文档："这是一段没有任何带数值的关键字的文本。"

**示例输出：**
```json
null
```

--情况四：文档不存在关键字，且关键词库为空--
**示例输入：**
关键词库：""
文档："这是一段没有任何带数值的关键字的文本。"

**示例输出：**
```json
null
```

现在，请根据以上要求处理以下文档内容，关键词库为：“'''
    SINGLE_DOC_FIND_KEYWORD_PROMPT += str(find_keywords)
    SINGLE_DOC_FIND_KEYWORD_PROMPT += '''”：

**文档内容：**

'''
    SINGLE_DOC_FIND_KEYWORD_PROMPT += str(doc_text)
    return SINGLE_DOC_FIND_KEYWORD_PROMPT

  # （提示词）查找语义相同关键词
  def find_same_mean_keyword_prompt(self, json_data):
    FIND_SAME_MEAN_KEYWORD_PROMPT = '''
你的任务是基于提供的JSON数据，分析每个关键词的**"value"**和**"object"**字段，确定哪些关键词实际上指向相同的指标或对象。每个JSON条目包含以下字段：

- **"index"**：条目的索引号。
- **"keyword"**：关键词。
- **"value"**：与关键词关联的具体数值或描述，可能包含单位信息或是物理性质或特征的属性。
- **"object"**：关键词指代的具体指标或对象。

**目标**：识别所有描述同一概念或对象但表述不同的关键词，并记录它们在列表中的索引位置。如果某个指标只有一个对应的关键词，则不需要记录。

**请按照以下格式返回结果**：

```json
{
  "result": [
    {
      "i": [索引1, 索引2] // 实际指代相同指标的关键词的索引列表
    },
    // 如有其他指代相同指标的关键词组合，继续添加类似的结构
    {
      "i": [索引3] // 单个指代某一指标的关键词索引
    },
    // 如有更多单个关键词，继续添加
  ]
}
```

**注意事项：**

- 仔细对比每个条目的**"value"**和**"object"**字段，判断它们是否指向相同的指标或对象，重点关注**"object"**字段。
- 利用**"value"**字段中的数值或描述和单位信息，辅助判断两个关键词是否指向相同的指标。例如，如果两个关键词的**"object"**字段相似，且**"value"**字段中的单位也一致，那么它们可能指向相同的指标。
- 即使关键词的表述不同，只要**"value"**和**"object"**字段指向同一概念或对象，就视为匹配。例如，“张三的妈妈”和“张三的爸爸的老婆”指的是同一个人。
- **输出必须严格按照上述JSON格式。**
- 务求全面，即使可能会出现少量误判，也应尽量避免遗漏任何可能的匹配。
- **仅输出JSON的内容**，不要输出除JSON以外的其它内容，内容以“```json”开始，以“```”结束。

**示例输入：**
[
  {
    "index": 1,
    "keyword": "张三的爸爸的老婆",
    "value": "54岁",
    "object": "张三的妈妈的年龄"
  },
  {
    "index": 2,
    "keyword": "张三的妈妈",
    "value": "53岁",
    "object": "张三的妈妈的年龄"
  },
  {
    "index": 3,
    "keyword": "李四的妈妈的老公",
    "value": "30岁",
    "object": "李四的爸爸的年龄"
  },
  {
    "index": 4,
    "keyword": "李四的爸爸",
    "value": "30岁",
    "object": "李四的爸爸的年龄"
  },
  {
    "index": 5,
    "keyword": "小黄",
    "value": "29岁",
    "object": "小黄的年龄"
  }
]

**示例输出：**
```json
{
  "result": [
    {
      "i": [1, 2]
    },
    {
      "i": [3, 4]
    },
    {
      "i": [5]
    }
  ]
}
```

**输入的JSON数据：**

'''
    FIND_SAME_MEAN_KEYWORD_PROMPT += str(json_data)
    return FIND_SAME_MEAN_KEYWORD_PROMPT
    
  def find_same_mean_keyword_prompt_multiple_files(self, json_data, source_file_id):
    FIND_SAME_MEAN_KEYWORD_PROMPT = '''
你的任务是基于提供的JSON数据，数据包含多个文件的关键词提取信息和文件ID。请对比源文件（file_id="'''

    FIND_SAME_MEAN_KEYWORD_PROMPT += str(source_file_id)
    FIND_SAME_MEAN_KEYWORD_PROMPT += '''"）与其他目标文件的**"value"**和**"object"**字段，确定哪些关键词实际上指向相同的指标或对象。每个JSON条目包含以下字段：

- **"file_id"**：文件编号。
- **"index"**：条目的索引号。
- **"keyword"**：关键词。
- **"value"**：与关键词关联的具体数值或描述。
- **"object"**：关键词指代的具体指标或对象。

**目标**：识别所有描述同一概念或对象但表述不同的关键词，并记录它们在列表中的索引位置。如果某个指标只有一个对应的关键词，则不需要记录。

**请按照以下格式返回结果**：

```json
{
  "result": [
    {
      "sfid": "", # 源文件编号
      "tfid": "", # 对比文件编号
      "compare_result": [
        # 实际指代相同指标的关键词对象
        {
          "s": { # 源文件关键词对象
            "i": '',
            "k": "",
            "v": "",
            "o": ""
          },
          "t":{ # 对比文件关键词对象
            "i": '',
            "k": "",
            "v": "",
            "o": ""
          }
        }
      ]
    },
    # 如有其他文件，继续添加类似结构的对象
      ]
    }
  ]
}

```

**注意事项：**

- 仔细对比每个条目的**"value"**和**"object"**字段，判断它们是否指向相同的指标或对象，重点关注**"object"**字段。
- 利用**"value"**字段中的数值或描述和单位信息，辅助判断两个关键词是否指向相同的指标。例如，如果两个关键词的**"object"**字段相似，且**"value"**字段中的单位也一致，那么它们可能指向相同的指标。
- 即使关键词的表述不同，只要**"value"**和**"object"**字段指向同一概念或对象，就视为匹配。例如，“张三的妈妈”和“张三的爸爸的老婆”指的是同一个人。
- **输出必须严格按照上述JSON格式。**
- 务求全面，即使可能会出现少量误判，也应尽量避免遗漏任何可能的匹配。
- **仅输出JSON的内容**，不要输出除JSON以外的其它内容，内容以“```json”开始，以“```”结束。
- **无结果情况**：如果未找到任何符合条件的结果，则仅输出{"result":[]}，不输出其他任何内容。

--情况一：有符合条件的结果--
**示例输入：**
[
  {
    "file_id": "1",
    "result": [
      {
        "index": 1,
        "keyword": "张三的爸爸的老婆",
        "value": "54岁",
        "object": "张三的妈妈的年龄"
      },
      {
        "index": 2,
        "keyword": "李四的妈妈的老公",
        "value": "30岁",
        "object": "李四的爸爸的年龄"
      },
    ]
  },
  {
    "file_id": "2",
    "result": [
      {
        "index": 1,
        "keyword": "张三的妈妈",
        "value": "53岁",
        "object": "张三的妈妈的年龄"
      },
      {
        "index": 2,
        "keyword": "李四的爸爸",
        "value": "30岁",
        "object": "李四的爸爸的年龄"
      },
      {
        "index": 3,
        "keyword": "小黄",
        "value": "29岁",
        "object": "小黄的年龄"
      }
    ]
  }
]

**示例输出：**
```json
{
  "result": [
    {
      "sfid": "1",
      "tfid": "2",
      "compare_result": [
        {
          "s": {
            "i": 1,
            "k": "张三的爸爸的老婆",
            "v": "54岁",
            "o": "张三的妈妈的年龄"
          },
          "t":{
            "i": 1,
            "k": "张三的妈妈",
            "v": "53岁",
            "o": "张三的妈妈的年龄"
          }
        },
        {
          "s": {
            "i": 2,
            "k": "李四的妈妈的老公",
            "v": "30岁",
            "o": "李四的爸爸的年龄"
          },
          "t":{
            "i": 2,
            "k": "李四的爸爸",
            "v": "30岁",
            "o": "李四的爸爸的年龄"
          }
        }
      ]
    }
  ]
}
```

--情况二：无符合条件的结果--
**示例输入：**
[
  {
    "file_id": "1",
    "result": [
      {
        "index": 1,
        "keyword": "张三的爸爸的老婆",
        "value": "54岁",
        "object": "张三的妈妈的年龄"
      },
      {
        "index": 2,
        "keyword": "李四的妈妈的老公",
        "value": "30岁",
        "object": "李四的爸爸的年龄"
      }
    ]
  }
]

**示例输出：**
```json
{
  "result": []
}
```

指定source_file_id = "'''
    FIND_SAME_MEAN_KEYWORD_PROMPT += str(source_file_id)
    FIND_SAME_MEAN_KEYWORD_PROMPT += '''"作为源文件，其余文件作为目标文件。

**输入的JSON数据：**

'''
    FIND_SAME_MEAN_KEYWORD_PROMPT += str(json_data)
    return FIND_SAME_MEAN_KEYWORD_PROMPT
    
if __name__ == "__main__":
    prompt = Prompt()
    content = prompt.single_doc_find_keyword_prompt("这是文本内容", "关键词1, 关键词2, ...")
    print(content)
    print("-"*100)
    content = prompt.find_same_mean_keyword_prompt("这是测试用JSON数据")
    print(content)
    print("-"*100)
    content = prompt.find_same_mean_keyword_prompt_multiple_files("这是测试用JSON数据","XXX-YYY-ZZZ")
    print(content)
    print("-"*100)